Skip to content

Add in-the-time-zone extension#25041

Draft
imranidz wants to merge 12 commits intoraycast:mainfrom
imranidz:ext/in-the-time-zone
Draft

Add in-the-time-zone extension#25041
imranidz wants to merge 12 commits intoraycast:mainfrom
imranidz:ext/in-the-time-zone

Conversation

@imranidz
Copy link

@imranidz imranidz commented Feb 1, 2026

Description

In The (Time) Zone helps you coordinate across time zones effortlessly. See at a glance when your team is available with a color-coded timeline view.

Features:

Timeline View — See all your cities at once with working hours highlighted
Time Scrubbing — Use arrow keys to shift time and instantly see how it affects everyone
Smart Colors — Green (9-5 working), Yellow (7-9, 5-12 marginal), Red (12-7 sleeping)
Sunrise/Sunset — Know when the sun rises and sets in each city
Any City — Search and add any city in the world
Perfect for remote teams, scheduling international meetings, or planning calls with friends abroad.

Screencast

image image image

Checklist

- Rename extension slug to in-the-time-zone
- Prepare extension for Raycast Store
- updates timezones
- init
- Initial commit
@raycastbot raycastbot added the new extension Label for PRs with new extensions label Feb 1, 2026
@raycastbot
Copy link
Collaborator

Congratulations on your new Raycast extension! 🚀

We're currently experiencing a high volume of incoming requests. As a result, the initial review may take up to 10-15 business days.

Once the PR is approved and merged, the extension will be available on our Store.

@imranidz imranidz marked this pull request as ready for review February 1, 2026 06:02
@greptile-apps
Copy link
Contributor

greptile-apps bot commented Feb 1, 2026

Greptile Summary

This PR introduces the In The (Time) Zone extension — a timeline visualizer that lets users scrub across time zones with color-coded working/sleeping hours, sunrise/sunset display, and city search. The implementation is well-structured with clean separation between rendering (timeline-renderer.ts), time utilities (time-utils.ts), and UI components. Previously flagged issues (leap-year day diff, (base) label offset comparison, unused preference, manual Preferences interface, hardcoded scrub amounts, getNextHour reset) appear to have been addressed.

Remaining issues found:

  • Polar-region sunrise/sunset bugSunCalc.getTimes() returns NaN dates for cities that experience polar day or polar night. The current code passes these directly to Luxon's fromJSDate, which produces an invalid DateTime and renders "Invalid DateTime" in the metadata panel instead of "—". An isValid guard in sun-times.ts is needed.
  • React key collision riskcitySunTimes entries are keyed by city.cityName in timeline-view.tsx. Two cities sharing the same display name (e.g., "Springfield" from different states) would produce duplicate React keys and potential rendering inconsistencies. Using the zoneId as the key avoids this.
  • Action title casing"Copy Base Iso" should be "Copy Base ISO" in both in-the-time-zone.tsx and timeline-view.tsx.

Confidence Score: 3/5

  • Safe to merge after fixing the polar-region NaN date bug in sun-times.ts; remaining issues are minor.
  • The core logic is solid and previously flagged issues have been resolved. One genuine runtime bug exists (SunCalc NaN for polar cities producing "Invalid DateTime" output), plus a low-likelihood React key collision and minor title casing issues.
  • extensions/in-the-time-zone/src/sun-times.ts requires a validity guard for polar-region NaN dates before this is ready to publish.

Important Files Changed

Filename Overview
extensions/in-the-time-zone/src/sun-times.ts Wraps SunCalc to compute sunrise/sunset times — does not guard against NaN dates returned by SunCalc for polar-region cities, causing "Invalid DateTime" in the UI instead of a "—" fallback.
extensions/in-the-time-zone/src/in-the-time-zone.tsx Main command — now correctly reads preferences via getPreferenceValues<Preferences>() and uses them for scrub amounts; minor: action title "Copy Base Iso" should be "Copy Base ISO".
extensions/in-the-time-zone/src/timeline-renderer.ts Generates the compact Markdown timeline; day-diff calculation uses Luxon millisecond diff which is correct across leap years, and the (base) label is correctly tied to zoneId === baseCityId.
extensions/in-the-time-zone/src/citySearch.ts City lookup and search utilities built on city-timezones; ID encoding, deduplication, and special-timezone handling look correct.
extensions/in-the-time-zone/package.json Extension manifest with two dropdown preferences (defaultScrubMinutes, optionScrubMinutes) that are now properly wired up in the component; metadata screenshots present, category "Productivity" is appropriate.
extensions/in-the-time-zone/src/timeline-view.tsx Renders Detail timeline with sun times metadata and scrub actions; React list key uses city display name which can collide for same-named cities, and action title casing should be "ISO" not "Iso".

Last reviewed commit: "feat: update time zo..."

Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

5 files reviewed, 2 comments

Edit Code Review Agent Settings | Greptile

@imranidz imranidz marked this pull request as draft February 3, 2026 02:53
@imranidz imranidz marked this pull request as ready for review February 3, 2026 02:53
Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

4 files reviewed, 1 comment

Edit Code Review Agent Settings | Greptile

@imranidz imranidz marked this pull request as draft February 3, 2026 04:41
@imranidz imranidz marked this pull request as ready for review February 3, 2026 04:41
Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

3 files reviewed, 1 comment

Edit Code Review Agent Settings | Greptile

@imranidz imranidz marked this pull request as draft February 5, 2026 05:11
@imranidz imranidz marked this pull request as ready for review February 5, 2026 05:11
Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

4 files reviewed, 1 comment

Edit Code Review Agent Settings | Greptile

@0xdhrv 0xdhrv self-assigned this Feb 9, 2026
@raycastbot
Copy link
Collaborator

This pull request has been automatically marked as stale because it did not have any recent activity.

It will be closed if no further activity occurs in the next 7 days to keep our backlog clean 😊

@raycastbot raycastbot added the status: stalled Stalled due inactivity label Feb 23, 2026
Copy link
Contributor

@0xdhrv 0xdhrv left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for your contribution 🔥

We already have an extension in the Store that deals with Team Timezone. Could we consider enhancing the existing extension below instead of creating another one?

You can extend the existing extension by adding new commands to it, since it seems to have related functionality.

If there are unique features or workflows you’re aiming to add, we’d love to hear them and see if they can be integrated into this to avoid duplication and improve discoverability.

This would help avoid duplication and keep related functionality consolidated in one place.
As mentioned in our extension guidelines here ↗

@0xdhrv 0xdhrv marked this pull request as draft February 23, 2026 11:26
@raycastbot raycastbot removed the status: stalled Stalled due inactivity label Feb 23, 2026
@imranidz
Copy link
Author

Thanks for your contribution 🔥

We already have an extension in the Store that deals with Team Timezone. Could we consider enhancing the existing extension below instead of creating another one?

You can extend the existing extension by adding new commands to it, since it seems to have related functionality.

If there are unique features or workflows you’re aiming to add, we’d love to hear them and see if they can be integrated into this to avoid duplication and improve discoverability.

This would help avoid duplication and keep related functionality consolidated in one place.
As mentioned in our extension guidelines here ↗

Hi @0xdhrv thanks for your comment. If you look at the apps they're fundamentally different. Timezone buddy tries to have the concept of keeping track of your friends in different time zones.

My app is designed to figure out what time it is in other time zones, then scrub effectively left and right to figure out the overlaps of reasonable times between different different time zones (thus the name, "in-the-timezone"). Use case:

  • Oh I need to meet with these 3 people: me in the US, someone in India and one in Switzerland. When can I meet the soonest that's reasonable for them. I want to know ASAP without having to pull up a conversion calculator.
  • Oh I have a process that's running that'll complete at 12PM UTC, which team member do I delegate checking this process to effectively?
  • Hmm it's now 3PM PST, this process finished at 12PM UTC, what should I see the local time logs to be at?

Fundamentally, it requires taking existing time, and scrubbing back and forth to find the corresponding time across the zones. This does not exist in the others and is philosophically different in it's operations and use.

I understand that you forsee an overlap, but I think they're fundamentally different use cases and adding to it would change the philosophy of these two apps. Let me know if you'd like me to define mine more clearly.

@raycastbot
Copy link
Collaborator

This pull request has been automatically marked as stale because it did not have any recent activity.

It will be closed if no further activity occurs in the next 7 days to keep our backlog clean 😊

@raycastbot raycastbot added the status: stalled Stalled due inactivity label Mar 13, 2026
@imranidz imranidz marked this pull request as ready for review March 19, 2026 00:17
@imranidz
Copy link
Author

imranidz commented Mar 19, 2026

@0xdhrv or any other admin , please let me know what the plan is and if I can provide further clarification. Again as I mentioned above I think these are different use cases.

@raycastbot raycastbot removed the status: stalled Stalled due inactivity label Mar 19, 2026
…atting

- Refactor time handling to use getCurrentTimeISO for consistency
- Update package.json with new title formatting and dependencies
- Enhance timeline rendering with improved markdown generation
- Introduce time-utils for GMT offset and delta formatting
- Clean up unused functions and streamline code structure
- Add ESLint configuration for better code quality
@0xdhrv
Copy link
Contributor

0xdhrv commented Mar 19, 2026

@greptileai, could you please do a fresh review of this PR?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nitpick: maybe a different icon

If you can choose a slightly more unique icon, that would be great for end users to differentiate it from the other extensions

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue: metadata image style

The current screenshot has local extension icon in the bottom bar

Could you make sure that the metadata images use the same background/appearance as the rest to maintain the same visual expression?

Reference:

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue: metadata image style

The current screenshot has local extension icon in the bottom bar

Could you make sure that the metadata images use the same background/appearance as the rest to maintain the same visual expression?

Reference:

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue: metadata image style

The current screenshot has local extension icon in the bottom bar

Could you make sure that the metadata images use the same background/appearance as the rest to maintain the same visual expression?

Reference:

{
"$schema": "https://www.raycast.com/schemas/extension.json",
"name": "in-the-time-zone",
"title": "In the (Time) Zone",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
"title": "In the (Time) Zone",
"title": "In the Timezone",

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion: just a suggestion for the title

In case you accept it, please update it for the command's title as well

Copy link
Contributor

@0xdhrv 0xdhrv left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @imranidz 👋

Thanks for the contribution and patience.

I have added a few comments related to metadata images for you to address and few suggestions to make it better.

Also, I have updated the extension with some improvements, please take a look at it.

@0xdhrv 0xdhrv marked this pull request as draft March 19, 2026 06:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

new extension Label for PRs with new extensions platform: macOS

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants